/**
 * 题目链接：https://www.luogu.com.cn/problem/P1440
 */
#include <iostream>
#include <cmath>
using namespace std;
// f[i][j] 表示从 i 开始的长度为 2^j 序列中的最小值
const int MAX = 2e6 + 7;
// n 代表队列长度，m 代表查询区间长度
int n, m;
int f[MAX][22];

// ST 预处理
void preHandle() {
  for (int j = 1; j <= (int)log2(n); ++j) {
    for (int i = 1; i + (1 << j) - 1 <= n; ++i) {
      f[i][j] = min(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
    }
  }
}

// ST 区间查询, 如果卡区间可以通过用两个子区间进行拼凑
int query(int l, int r) {
  int k = (int)log2(r - l + 1);
  return min(f[l][k], f[r - (1 << k) + 1][k]);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> f[i][0];
  }

  preHandle();

  cout << 0 << endl;
  for (int i = 2, j; i <= n; i++) {
    j = (i - m) > 1 ? i - m : 1;
    cout << query(j, i - 1) << endl;
  }

  return 0;
}